<?php
namespace app\common\library\job;
use app\api\model\SeparateSet;
use think\Log;
use think\queue\Job;
use wechat\MiniProgramService;

class MessageSendJob
{
    /**
     * 处理邮件发送任务
     *
     * @param Job $job 当前任务对象
     * @param array $data 邮件发送所需数据
     */
    public function fire(Job $job, array $data)
    {
        try {
            $set = new SeparateSet();
            $this->service_secret = $data['service_secret'];
            $service_secret = $set->where(['secret'=>$this->service_secret])->find();
            $this->wechat = new MiniProgramService($service_secret);
            foreach ($data['data'] as $item) {
                $res = $this->wechat->generate_code(
                    ['param'=>$item['number'],'path'=>"pages/activa_code/index", 'directory'=>"/path/to/qrcode/"]
                    ,'code_id');
            }
            $job->delete();
            // 成功发送邮件后删除队列任务
        } catch (\Exception $e) {
            echo $e->getMessage();
            $job->delete();
            if ($job->attempts() < 3) { // 例如最多重试3次
                $job->release(60); // 在60秒后再次尝试执行
            } else {
                $this->failed($job, $data);
            }
        }
    }

    /**
     * 任务执行失败后的回调
     *
     * @param Job $job 当前任务对象
     * @param array $data 邮件发送所需数据
     */
    public function failed(Job $job, array $data)
    {
        // 记录日志或采取其他补救措施
        Log::record('邮件发送任务失败，邮箱：' . $data['email'], 'error');
        // 可考虑在此处通知管理员，或采取其他失败后处理逻辑
    }
}